package com.yuandian.utils;

import com.yuandian.api.management.entity.ConfMpAlarmPeriod;
import com.yuandian.api.management.po.ConfMpAlarmParams;
import com.yuandian.enums.MpAlarmIndicator;

import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 说明：移动中台数据生成工具类
 * @Author zfsn
 * @Date 2023/4/19 18:47
 */
public final class MpGenUtil {

	/**
	 * 根据服务调用方式生成默认的告警配置
	 * @param invocationMode 服务调用方式
	 * @return 默认的告警配置集合
	 */
	public static List<ConfMpAlarmParams> genDefaultAlarm(String invocationMode, Integer serviceId) {
		List<ConfMpAlarmPeriod> periodList = new ArrayList<>();
		ConfMpAlarmPeriod defaultPeriod = new ConfMpAlarmPeriod();
		defaultPeriod.setAlarmStartTime(LocalTime.MIN);
		defaultPeriod.setAlarmEndTime(LocalTime.MAX);
		periodList.add(defaultPeriod);
		List<ConfMpAlarmParams> list = new ArrayList<>();
		// 1、公共的告警指标
		// 系统级成功率
		list.add(ConfMpAlarmParams.builder()
				.serviceId(serviceId)
				.alarmCode(MpAlarmIndicator.SYSTEM_SUCCESS_RATE.name())
				.alarmName(MpAlarmIndicator.SYSTEM_SUCCESS_RATE.getAlarmName())
				.levelId("4")
				.threshold("95")
				.unitId("7")
				.template("[能力名称]-[能力服务]系统级成功率低于【阈值】 [实际值：【实际数据】，成功次数：【成功次数】，" +
						"客户端失败次数：【客户端失败次数】，服务端失败次数：【服务端失败次数】，超时次数：【超时次数】](%)。")
				.statisticalGranularity(5)
				.isEnable(0)
				.remarks(null)
				.periodList(periodList)
				.build());
		// 平均响应耗时
		list.add(ConfMpAlarmParams.builder()
				.serviceId(serviceId)
				.alarmCode(MpAlarmIndicator.AVG_RESPONSE_TIME.name())
				.alarmName(MpAlarmIndicator.AVG_RESPONSE_TIME.getAlarmName())
				.levelId("4")
				.threshold("500")
				.unitId("5")
				.template("[能力名称]-[能力服务]平均响应耗时大于【阈值】[实际值：【实际数据】](毫秒)。")
				.statisticalGranularity(5)
				.isEnable(0)
				.remarks(null)
				.periodList(periodList)
				.build());
		// 超时次数
		list.add(ConfMpAlarmParams.builder()
				.serviceId(serviceId)
				.alarmCode(MpAlarmIndicator.TIMEOUT_COUNT.name())
				.alarmName(MpAlarmIndicator.TIMEOUT_COUNT.getAlarmName())
				.levelId("4")
				.threshold("5")
				.unitId("9")
				.template("[能力名称]-[能力服务]超时次数大于【阈值】[实际值：【实际数据】](次)。")
				.statisticalGranularity(5)
				.isEnable(0)
				.remarks(null)
				.periodList(periodList)
				.build());
		if ("11".equals(invocationMode) || "12".equals(invocationMode)) {
			// 2、API、SDK
			// 业务级成功率
			list.add(ConfMpAlarmParams.builder()
					.serviceId(serviceId)
					.alarmCode(MpAlarmIndicator.BUSINESS_SUCCESS_RATE.name())
					.alarmName(MpAlarmIndicator.BUSINESS_SUCCESS_RATE.getAlarmName())
					.levelId("4")
					.threshold("90")
					.unitId("7")
					.template("[能力名称]-[能力服务]业务级成功率低于【阈值】 [实际值：【实际数据】，成功量：【成功量】，失败量：【失败量】](%)。")
					.statisticalGranularity(5)
					.isEnable(0)
					.remarks(null)
					.periodList(periodList)
					.build());
			// 中断耗时
			list.add(ConfMpAlarmParams.builder()
					.serviceId(serviceId)
					.alarmCode(MpAlarmIndicator.INTERRUPT_TIME.name())
					.alarmName(MpAlarmIndicator.INTERRUPT_TIME.getAlarmName())
					.levelId("4")
					.threshold("10")
					.unitId("10")
					.template("[能力名称]-[能力服务]中断耗时大于【阈值】[实际值：【实际数据】](分钟)。")
					.statisticalGranularity(5)
					.isEnable(0)
					.remarks(null)
					.periodList(periodList)
					.build());
		} else if ("21".equals(invocationMode) || "31".equals(invocationMode)) {
			// 3、SaaS、PaaS
			// 登录成功率
			list.add(ConfMpAlarmParams.builder()
					.serviceId(serviceId)
					.alarmCode(MpAlarmIndicator.LOGIN_SUCCESS_RATE.name())
					.alarmName(MpAlarmIndicator.LOGIN_SUCCESS_RATE.getAlarmName())
					.levelId("4")
					.threshold("95")
					.unitId("7")
					.template("[能力名称]-[能力服务] 登录成功率低于【阈值】[实际值：【实际数据】，成功数：【成功数】，失败数：【失败数】](%)。")
					.statisticalGranularity(5)
					.isEnable(0)
					.remarks(null)
					.periodList(periodList)
					.build());
		}
		return list;
	}
}
